#ifndef SYMBOL_H
#define SYMBOL_H

#include "string.h"
#include "stdio.h"
#include "stdlib.h"
#include "dimention.h"

#define TYPE_VARIABLE 0
#define TYPE_CONSTANT 1
#define TYPE_TEMP 2
#define TYPE_ARRAY 3
#define TYPE_STENCIL 4
#define TYPE_STRING 5

/* Table des symboles */
typedef struct symbol_table {
  char *nom;
  int type;
  int valeur;
  dim_struct* dim;
  char* texte;
  struct symbol_table *suivant;
} symbol_table;

/* 
 * Fonction qui ajoute un symbole au début de la liste chainée 
 */
symbol_table* add_symbol(symbol_table **table, char *identificateur, int type, int valeur);

/* 
 * Fonction qui ajoute un symbole temporaire au début de la liste chainée 
 */
symbol_table* add_temp_symbol(symbol_table **table, int type, int* temp_count, int valeur);

/* 
 * Fonction qui ajoute un une chaine de caractère temporaire au début de la liste chainée 
 */
symbol_table* add_temp_string_symbol(symbol_table **table, int* temp_count, char* valeur);

/* 
 * Fonction qui ajoute un tableau au début de la liste chainée 
 */
symbol_table* add_array_symbol(symbol_table **table, char *identificateur, int type, dim_struct* dim);

/* 
 * Fonction qui renvoie le symbole présent à l'index en paramètre 
 */
symbol_table * get_symbol(symbol_table *table, char* identificateur);

/* 
 * Affiche la table des symboles
 */
void print_table(symbol_table *table);

#endif
